# -*- coding: utf-8 -*-
# @Project : tcpPseudoData
# @File    : ByteByByteXOR.py
# @Author  : 朱宽
# @Time    : 2021/5/26 14:54
# @Software: Win10 / Python3 / Pycharm

class ByteXOR():
    '''
    逐个字节异或，最后生成一个字节的结果
    '''
    def byte_by_byte_xor(self,pData):
        fcs = pData[0]  # 寄存器组 初始化为列表第一个值，然后与后面的每一个字节的数据进行异或运算
        for i in range(1,len(pData)):#第一个字节与后面的每一个字节进行异或运算，直至pData列表为空
            fcs=fcs ^ pData[i]

        res=fcs & 0xff  #只取一个字节的值

        return hex(res)[2:].zfill(2) #直接获取 校验位，1字节，zfill()函数决定按几位输出


if __name__=="__main__":
    from  HandleString import HandleString
    test_string=HandleString()
    hex_str='0102000f0135710600030002303030303133353731303630303033'
    print('hex_str：'+hex_str)
    pData=test_string.list_hex_string(hex_string=hex_str)#16进制字符串转换为 字节列表
    print('列表如下：')
    print(pData)

    test=ByteXOR()
    res = test.byte_by_byte_xor(pData)
    print('校验码为：'+res)

    reg_data='7e'+hex_str+res+'7e'
    print('发送包：'+reg_data)